import java.util.Scanner;

public class j3 {
    /*public static int fb(int n){
        if (n<=2){
            return 1;
        }
        else {
            return (fb(n-1)+fb(n-2));
        }
    }

    public static void main(String[] args) {
        System.out.println(fb(3));
    }*/

    //分别定义求两个整数的方法 和 三个小数之和的方法
   /* public static int add1(int a,int b){
        return a+b;
    }
    public static float add2(float c,float d,float e){
        return c+d+e;
    }
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int a=1,b=1;

        float c=1,d=1,e=1;
        System.out.println(add1(a, b));
        System.out.println(add2(c,d,e));
    }*/

    //在同一个类中定义多个方法：要求不仅可以求2个整数的最大值，还可以求3个小数的最大值

    /*public static int add1(int a,int b){
        return a+b;
    }
    public static int add2(double a,double b,double c){
        return (int)(a+b+c);
    }

    public static void main(String[] args) {
        int a=1;
        int b=2;
        int c=3;
        double d=3.14;
        double e=2.14;
        double f=6.15;
        System.out.println(add1(a, b));
        System.out.println(add2(d, e, f));

    }*/
   /* public static int fib(int n){
        int ret=1;
        for (int i = 1; i <=n ; i++) {
            ret*=i;
        }
        return ret;
    }

    public static void main(String[] args) {
        System.out.println(fib(4));
    }*/


    //递归求解汉诺塔问题
    public static void move(char pos1 ,char pos2) {
        //模拟实现盘子的移动
        //pos1移动到pos2，这里pos1、pos2只是一个代指
        // 比如你想移动A上方的一个盘子到C,你传参就是pos1=A,pos2=B
        System.out.print(pos1+"->"+pos2+" ");
    }

    public static void hanNuoTa(int n,char pos1 ,char pos2,char pos3) {
        //n表示要移动的盘子个数
        //pos1起始位置、pos2中转位置、pos3目标位置
        //因为移动过程中，目标位置、中转位置是会变的
        if(n==1)
        {
            move(pos1,pos3);
        }
        else
        {
            hanNuoTa(n-1,pos1,pos3,pos2);
            //起始位置移动n-1个到中转位置
            move(pos1,pos3);//n-1个移动完，将起始位置最大的1个移动到目标位置
            //问题转换成：pos2是起始位置，pos3目标位置，pos1中转位置，如何将n-1个盘，从pos2移动到pos3
            hanNuoTa(n-1,pos2,pos1,pos3);
        }
    }

    public static void main(String[] args) {
        hanNuoTa(1,'A','B','C');
        System.out.println();
        hanNuoTa(2,'A','B','C');
        System.out.println();
        hanNuoTa(3,'A','B','C');
        System.out.println();
        hanNuoTa(4,'A','B','C');
        System.out.println();
    }

}
